home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / tvtoys04.zip / README.TXT < prev    next >
Text File  |  1993-12-18  |  32KB  |  829 lines

  1.  
  2.                                 TVToys
  3.                               Version 1.4
  4.                              December 1993
  5.  
  6.                          Far Niente Productions
  7.  
  8.  
  9.     Contents  ▄
  10.   ▀▀▀▀▀▀▀▀▀▀▀▀▀
  11.    Introduction
  12.    Copyright
  13.    Short Description
  14.    Package File List
  15.  
  16.    Instructions
  17.    Porting
  18.    Suggestions
  19.    Turbo Pascal 6.0 Users
  20.    Compatibility Testing
  21.    Coding Style
  22.    Protected Mode Information
  23.    Overlay Information
  24.    PC Video Modes
  25.    Video 7
  26.  
  27.    The Improved Help File
  28.    Extended Video Mode Support Code
  29.    Custom Fonts
  30.    The NewMouse Unit
  31.    EXE Stream Unit
  32.    VideoModeChanged Variable
  33.  
  34.    Changes
  35.  
  36.    Credits
  37.    Author, Support, Info, Bugs etc
  38.    To Do List
  39.  
  40.  
  41.  
  42.     Introduction  ▄
  43.   ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  44. Welcome to TVToys!
  45.  
  46. This is a collection of useful stuff that should be available to all
  47. Turbo Vision programmers. It is intended for Turbo Pascal 7.0 but would
  48. be possible to port to TP6. The font, palette and video mode code can
  49. be used in plain text mode without Turbo Vision.
  50.  
  51. THE SOURCE IS FREE AND COMES WITH NO WARRANTIES WHATSOEVER.
  52.  
  53. I hope that you will find this package useful. Have fun with it!
  54.  
  55.  
  56.  
  57.     Copyright  ▄
  58.   ▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  59. You may use this package for free and pass it on to other persons as
  60. long as you clearly state, in the header as well as in the code, all
  61. changes made to the original code.
  62.  
  63. You may not pass along compiled versions of the source, except as
  64. executable files.
  65.  
  66. You may also upload this package, unmodified, to bulletin boards or
  67. other public access places.
  68.  
  69. There must be no charge associated with this package, though you may
  70. include the unmodified package as a whole in shareware/freeware
  71. compilations if only a nominal amount is charged for the compilation
  72. disk.
  73.  
  74. I strongly urge people with money to spare to donate a small token
  75. of appreciation in the $20 range. That's 5 campus meals for me.
  76.  
  77.  
  78.  
  79.     Short Description  ▄
  80.   ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  81. This package includes:
  82.  
  83. An improved Help viewer with back tracking and the possibility to add
  84. Contents and Index pages or whatever without recompiling HelpFile.
  85.  
  86. Extended video mode support. Code that determines what video modes are
  87. available and presents a list for the user to choose from. Video7 and
  88. VESA support included.
  89.  
  90. Custom fonts. Support for three different font file formats.
  91.  
  92. Palette routines. Change the EGA/VGA palette.
  93.  
  94. A mouse unit that limits the effects of buggy mouse drivers in extended
  95. video modes.
  96.  
  97. Three demonstration programs, personal configuration files.
  98.  
  99. Lots of commented code, tried and tested.
  100.  
  101.  
  102.  
  103.     Package File List  ▄
  104.   ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  105. The package consists of the following files:
  106.  
  107. TOYAPP.PAS    The fast way to incorporate TVToys in your own app.
  108.  
  109. HELPFILE.PAS  Improved HelpFile with back tracking and external commands
  110. HELPTEST.PAS  Demonstration of HelpFile
  111. HELPCTX.PAS   Help contexts generated by TVHC
  112. HELPTEST.HLP  Demo Help text compiled with TVHC
  113. HELPTEST.TXT  The Help text source
  114.  
  115. VIDEO.PAS     A unit supporting extended video mode setting and searching
  116. MODEDLG.PAS   Dialog for presenting and selecting video modes
  117. TVVIDEO.PAS   TV support for all the new video modes
  118. VIDEOTST.PAS  Demonstration of Video, ModeDlg and TVVideo
  119. IMPRTANT.PAS  Warning dialog used by VideoTst
  120.  
  121. FONTFILE.PAS  Custom font file loading and storing
  122. FONTDLG.PAS   Custom font file selection dialog
  123. CHIC12.COM    Very nice font to get you going!
  124. DBLSTR.PAS    Special string class used by font file selection listbox
  125.  
  126. COLORBOX.PAS  Color selection box with a twist
  127. PAL.PAS       EGA/VGA palette handling
  128. TVPAL.PAS     TV palette changing dialog
  129. SCROLL.PAS    Scrollbar with instantanious dragging updates
  130.  
  131. RESTEST.PAS   Demonstrates streams, resource fonts, safer video detection
  132. CHECKVT.PAS   Automatic video detection choice dialog
  133.  
  134. NEWMOUSE.PAS  Snap in replacement mouse cursor for extended video modes
  135. COLORTXT.PAS  Enhanced static texts with color. Mini shadows
  136. EXESTRM.PAS   Stream that reads resources from your EXE
  137.  
  138. TOYCFG.PAS    Your personal code preferences file
  139. TOYPREFS.PAS  Your personal constants preferences file
  140.  
  141. TOYUTILS.PAS  Odd Pascal code, hex conversion, file and string stuff
  142. TVUTILS.PAS   Odd TV bits, validators and routines
  143. STRMREC.PAS   All the stream records in one unit
  144.  
  145. DPMI.PAS      DPMI assembler programming simplification code
  146. VESA.PAS      VESA support routines
  147.  
  148. TIP.TXT       Assortment of unrelated information.
  149. README.TXT    This text.
  150.  
  151.  
  152.  
  153.     Instructions  ▄
  154.   ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  155. There are two demo programs, VIDEOTST and HELPTEST. All you have to do
  156. is compile and run them for a quick demonstration. There is also a
  157. RESTEST program demonstrating some advanced TVToys programming.
  158.  
  159. If you are upgrading from a previous version, check the Changes and
  160. Porting sections in this file. All conditionals controlling conditional
  161. compilation are now gathered in one central file called TOYCFG.PAS,
  162. which you should edit to your liking. TOYAPP makes it easy to add TVToys
  163. to your own programs.
  164.  
  165. If your mouse behaves oddly at times when running VIDEOTST, try
  166. defining UseNewMouse in TOYCFG. (The mouse cursor jumps around when
  167. you change video modes, but that's because the cursor stays at the same
  168. position relative to the upper left corner)
  169.  
  170. If you use VIEWS.TPU/TPP as shipped by Borland, you can try to define
  171. Color before compiling and running VIDEOTST.PAS. This spiffs up the Info
  172. Dialog and demonstrates ColorTxt.
  173.  
  174. Conventions:     The file TOYAPP contains the unit toyApp which
  175.                  defines the object (class) TToyApp. Files are .PAS
  176.                  if nothing else is stated. A "section" is a part of
  177.                  this file, having the section name for header.
  178.  
  179. Read the header in each source file to get more information,
  180. VIDEOTST.PAS especially.
  181.  
  182.  
  183.  
  184.     Porting  ▄
  185.   ▀▀▀▀▀▀▀▀▀▀▀▀
  186. News flash: TVTOYS DOES NOT SUPPORT smFont8x8 and smSpecialFont8x8,
  187. MAKE SURE YOU REMOVE all such references. There is a ToggleVideoLines
  188. function instead. smFont8x8 loses its use with all the new video modes.
  189.  
  190. You have to EXPLICITLY set the VideoModeChanged pointer to a font and
  191. palette reloading procedure, see the VideoModeChanged section.
  192.  
  193.  
  194. I am pro choice, which means that I try to give you the choice of using
  195. a certain feature or not. This means that you have to do some editing to
  196. incorporate the code in your own apps. TToyApp is an attempt at easing
  197. the pains for you.
  198.  
  199. If you use TToyApp, you are stuck with the HelpFile and most of the
  200. video code. Even if your application doesn't use Help, ALL the Help code
  201. will be compiled into the application.
  202.  
  203. I believe in making TToyApp provide basic services, and the application
  204. itself handling menu choices etc, but it gets tedious copying so I
  205. decided to burn some things into TToyApp anyway.
  206.  
  207. The way I see it, you have to copy some of the HandleEvent from VideoTst
  208. (but you have to edit that code anyway) and create some menus. The menus
  209. include the problem of assigning command values, so I have refrained
  210. from supplying default constructors like StdEditMenuItems. You are
  211. welcome to write your own.
  212.  
  213. The dialogs now all have help contexts. By default, dummy values from
  214. TOYPREFS are used. You should supply your own help context file whose
  215. name must match that in HCFILE.PAS, or edit HCFILE. You don't have to
  216. define all contexts at once, TOYPREFS will cover the ones missing. Make
  217. sure you use toyPrefs BEFORE your HelpCtx file (unit X; uses toyPrefs,
  218. MyHelpCtx, ...). You might have to rebuild sometimes. See HELPTEST.TXT
  219. for a list of help contexts. Also notice that hcDosShell is defined in
  220. Borland's APP unit, which easily leads to conflicts. Make sure your own
  221. help context file is used after any other file defining help contexts.
  222.  
  223.  
  224.  
  225.     Suggestions  ▄
  226.   ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  227. Copy TOYCFG to your project directory and edit to your liking if a
  228. project calls for a different setup than you'd normally use.
  229.  
  230. Put toyPrefs very early in all uses lists, or your help context
  231. values will be zero. Notice how toyPrefs always preceds HelpCtx in
  232. the demonstration programs uses lists.
  233.  
  234. Inherit TToyApp and make a new unit (layer) that adds more
  235. functionality, without editing TOYAPP itself. This way you can easily
  236. upgrade your TVToys and still get an inheritable application with lots
  237. of functionality burned in.
  238.  
  239. If you need to inherit from another application object, copy TOYAPP.PAS
  240. and edit it so that TToyApp inherits that other application object.
  241.  
  242. The Info dialog and the Internal font choices are for demonstration
  243. purposes. Use your choice of "Toggle video lines", "Select video mode"
  244. and "Select font" only, or look at RESTEST.
  245.  
  246. Don't use disk file fonts, put them in a resource file and undefine
  247. DiskFonts in TOYCFG to save a lot of code.
  248.  
  249. Assume that your mouse driver contains bugs, they all do. NewMouse can
  250. help, but if the mouse driver is really buggy, there is little one can
  251. do except change the driver. Avoid all drivers not made by Microsoft or
  252. Logitech, they are usually just trash. Switch to a Microsoft or Logitech
  253. driver, they should work with all mice. MS-DOS 6 and Windows comes with
  254. a Microsoft driver, and Logitech drivers are available electronically.
  255.  
  256.  
  257.  
  258.     Turbo Pascal 6.0 users  ▄
  259.   ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  260. All the code can be converted for use with Turbo Pascal 6.0, if you are
  261. desperate. The worst problem is that Borland Pascal 7.0 clears the data
  262. segment before the program starts, which I make heavy use of. This means
  263. that the code won't work as intended even if it compiles with TP6. Off
  264. hand, I can think of VideoList, VesaVersion, VesaScanningSupported,
  265. OldFront and OldCount causing trouble. Here is an example of what you
  266. have to do:
  267.  
  268.   const
  269.     OldFront     : integer = 0;
  270.     OldCount     : integer = 0;
  271.  
  272. I have seen code that clears the data segment for you, though.
  273.  
  274. VIDEOTST uses an Application^.ExecuteDialog, check out TVEDIT.PAS in
  275. your TP6 TVDEMOS directory for an equivalent ExecDialog procedure.
  276.  
  277. You might want these, too:
  278.  
  279.   const
  280.     Seg0040 : Word = $0040;
  281.     SegB000 : Word = $B000;
  282.     SegB800 : Word = $B800;
  283.  
  284.  
  285.  
  286.     Compatibility Testing  ▄
  287.   ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  288. This code has mainly been tested on three machines:
  289.  
  290.   ■ A 286 with with a Chips VGA card and an EGA monitor.
  291.     Also tested with a Video7 card which provided 132 column output on
  292.     the EGA monitor. No protected mode. First development machine.
  293.  
  294.   ■ An IBM PS/1 486/33 with Tseng VGA chips. VERY slow at scanning.
  295.     First protected mode attempts.
  296.  
  297.   ■ A Dual monitor Compaq 386 Portable with a Video7 VGA card and
  298.     Super VGA monitor. Current development platform.
  299.  
  300. I have tested three mouse drivers on the Video 7 equipped 386:
  301. Microsoft Mouse driver version 8.20 and earlier does not work with
  302. extended text modes, it assumes them to be graphics modes. All Logitech
  303. mouse drivers should work with all text modes, I have only tested
  304. version 6.20. Genius mouse driver version 10.20 does not work, it
  305. doesn't realize what width the screen is. NewMouse fixes all this, but
  306. if the mouse driver is buggy (like Genius) there might be minor
  307. annoyances like the cursor jumping or temporarily disappearing at mode
  308. switches. I suggest that you check what mouse driver you are using,
  309. there are usually several on every hard disk. I use Microsoft's driver
  310. version 8.20 even though it's buggy, but you know what you get.
  311.  
  312. VESA compatibility was tested using a PD Video7 TSR on the 386.
  313.  
  314. UNIVESA.EXE by Kendall Bennett is NOT a full VESA implementation, it
  315. focuses solely on graphics video modes and will not provide the
  316. necessary information to avoid having to physically test every video
  317. mode.
  318.  
  319. If you promptly have to use UNIVESA or UNIVBE release 4.2 or earlier on
  320. a Video 7 video card, make sure you define V7UniVesaKludge, since there
  321. is a Video 7 specific bug in UNIVESA. Future versions of UNIVESA will
  322. probably not suffer from this.
  323.  
  324.  
  325.  
  326.     Coding Style  ▄
  327.   ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  328. Oh well, I do my best. I have tried to change my usual style slightly,
  329. for your sake.
  330.  
  331. I started using fully qualified names, so you would know where to look
  332. for the code. I now realize the browser will be of much more help, so
  333. the qualified names are gone. There is no need to use fully qualified
  334. names, as there are no name collisions.
  335.  
  336. I also started writing "Byte" instead of "byte", and so on for word,
  337. boolean etc, but I doubt that I am consistently using that style.
  338.  
  339. The Video and VESA code is littered with {$IFDEF} for VESA, V7 and
  340. DPMI support. I might make full support mandatory and remove all but
  341. the DPMI IFDEFs. Let me know what you think.
  342.  
  343. I have changed the names of most procedures at least once, so there
  344. might be references to old names in the documentation. Some code has
  345. been moved, so some references to files might be misleading. I have
  346. tried to spot most errors.
  347.  
  348. You will probably feel that I am overindenting my code, sigh.
  349.  
  350.  
  351.  
  352.     Protected Mode Information  ▄
  353.   ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  354. The code was originally developed and tested on a 286 without protected
  355. mode support. Development has now moved to a 386 with 4 Mb of memory and
  356. a Video7 VGA card.
  357.  
  358. All the code has been tested in protected mode, especially the Video7,
  359. Vesa and NewMouse code, and it works for me...
  360.  
  361.  
  362.  
  363.     Overlay Information  ▄
  364.   ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  365. You can overlay all units EXCEPT NewMouse, which contains an interrupt
  366. handler. It's a very small unit anyway, about 530 bytes.
  367.  
  368.  
  369.  
  370.     PC Video Modes  ▄
  371.   ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  372. Turbo Vision only knows about three video modes, and there is a reason
  373. for that. These three are the only "standard" 80 column text modes, all
  374. other video modes are manufacturer specific. All modes are referred to
  375. by number, and the three Turbo Vision knows about are number 2, 3 and 7.
  376. Numbers can range from 0 to 127, where most of the first 19 are used by
  377. VGA cards. Numbers above 19 are used for extended video modes.
  378.  
  379. Naturally, all manufacturers number their video modes differently, even
  380. if the screen size is the same. This means that you can't easily set a
  381. 80x60 video mode, for instance, since you wouldn't know what mode number
  382. to refer to, unless you know the brand of the video card. You might not
  383. even know if the video card supports 80x60, but your program could find
  384. out. The monitor might not like 80x60 either, but a program cannot
  385. detect if a VGA monitor is suited for Super VGA video modes.
  386.  
  387. There is now a new function, FindSimilarVideoMode(Cols,Rows), that will
  388. return the number of a video mode which is about Cols wide and Rows
  389. high. You can pass the mode number to SetSpecialVideoMode directly.
  390. Remember to use ScanVideoModes first, and make sure StoreModeData in
  391. TOYCFG.PAS is defined (it isn't by default). FindSimilarVideoMode uses a
  392. simple approach, but you can write your own algorithm.
  393.  
  394.  
  395.  
  396.     Video 7  ▄
  397.   ▀▀▀▀▀▀▀▀▀▀▀▀
  398. This package supports Video 7 video cards. Certain design decisions were
  399. made with Video 7 in mind (overly complicating things).
  400.  
  401. Video 7 cards do not recognize any text video mode numbers above 19 (see
  402. above) if you use the normal BIOS interrupt call, you must use a special
  403. Video 7 call. On the other hand, video mode 1 corresponds to the last
  404. Video 7 specific video mode set with such a Video 7 call. That is, if
  405. you set a 80x60 video mode with a Video 7 interrupt (the only way), you
  406. can use a normal BIOS call setting mode 1 and get the last Video 7
  407. specific mode set.
  408.  
  409. This also means that if you ask a Video 7 BIOS in the normal way what
  410. video mode is set, the answer will be 1 for all extended video modes.
  411. This creates problems as mode 1 is a standard 40x25 mode. Sometimes you
  412. will get a 40x25 mode when you least expect it, usually when you
  413. terminate your program abnormally inside the IDE. This only happens if
  414. you have a Video 7 video card.
  415.  
  416.  
  417.  
  418.     The Improved Help File  ▄
  419.   ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  420. HELPFILE.PAS is an improved help file with back tracking and custom key
  421. help screens. See HELPTEST.PAS for a demonstration.
  422.  
  423. The HelpFile code is a modified TP7 HelpFile with some bugs removed,
  424. most notably a bug that crashes everything if the help topic is empty.
  425.  
  426. There should be no difficulty upgrading your programs to use the
  427. improved HelpFile, just make your application object inherit TToyApp and
  428. define a status line, see HELPTEST. Make sure you set HelpFileName to
  429. your application's Help file name and everything will be taken care of
  430. for you.
  431.  
  432.  
  433.  
  434.     Extended Video Mode Support Code  ▄
  435.   ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  436. The units Video, ModeDlg, TVVideo and VESA provide extended video mode
  437. support. See VIDEOTST and RESTEST for a demonstration.
  438.  
  439. You CANNOT use smFont8x8 and smSpecialFont8x8 any more. REMOVE all
  440. references to them.
  441.  
  442. Video7 and VESA support are defined automatically. Modify TOYCFG.PAS to
  443. your liking.
  444.  
  445. VESA function calls take priority. CheckVideoType will still look for
  446. all video types supported, though. You can check for only some video
  447. types by changing the VideoTypesToCheck variable. CheckEVGA will always
  448. be called, this works with most computers, but not the Vesa and Video 7
  449. checks. This is a Video BIOS problem on some machines. The Vesa
  450. implementation might also be so buggy that the user rather lived without
  451. it. VideoTypesToCheck lets you configure video support at run time.
  452.  
  453.  
  454. How it all works:
  455. (This is a very long description! If you inherit TToyApp all you have to
  456. do is copy the uses list, some HandleEvent lines, the cmXXXX list and
  457. some menu code from VIDEOTST to make things work)
  458.  
  459. First call CheckVideoType. This will set VideoType, Video7 and
  460. VesaVersion to appropriate values. If VesaVersion is zero, no Vesa
  461. support was detected. (TToyApp.Init does this for you). You can call
  462. CheckVesa, CheckVideo7 and CheckEVGA yourself if you want greater
  463. control, or use VideoTypesToCheck.
  464.  
  465. Call SetupVideoList to construct a list of available video modes. If a
  466. VESA video card is detected, attempts will be made to directly inquire
  467. about available video modes. This might not be supported by the video
  468. card since it is not mandatory in the VESA standard.
  469.  
  470. If the VESA test fails, ScanEVGAModes will be used to determine video
  471. modes.
  472.  
  473. ScanEVGAModes takes a somewhat simple and stupid approach to determine
  474. what video modes are available: It tries to set every video mode from 0
  475. to 127 to see if the BIOS responds by setting more or less legal values
  476. in the BIOS data segment. This might not work all that well all the
  477. time, see VIDEOTST.PAS for a list of caveats. The only other way (apart
  478. from VESA) of determining available video modes is to use lists of all
  479. video modes for all cards manufactured.
  480.  
  481. Use SelectVideoModeDialog to put up a TV dialog that lets the user
  482. choose from available modes.
  483.  
  484.  
  485. To avoid unnecessary scanning, you can use the SaveVideoModes and
  486. LoadVideoModes commands to save and restore the scanning results to/from
  487. disk.
  488.  
  489. If you don't like the format of the information (not very easy to read,
  490. maybe?) presented in the selection dialog, make changes in the AddMode
  491. procedure in MODEDLG.PAS.
  492.  
  493.  
  494. To use the video mode routines, use this as a checklist:
  495.  
  496. 1)  Always start out by determining the current video system.
  497.     (TToyApp.Init handles all this automatically)
  498.  
  499.     CheckVideoType;  (* Always start with this command *)
  500.  
  501.     Or define AutoCheckVideoType in TOYCFG.PAS, but then you can't
  502.     overlay VIDEO.PAS anymore.
  503.  
  504. 2)  Check that we're in fact dealing with a EGA/VGA before using
  505.     ScanEVGAModes. You can simply shut off the command:
  506.  
  507.   if VideoType=Other then
  508.     DisableCommands([cmVideoMode, cmVideoLines, cm14p, cm16p]);
  509.  
  510. 3)  Put up some sort of warnings before we start scanning...
  511.     HasToScan is false if we already know what video modes are
  512.     available. VesaScanningSupported is true if we don't have to
  513.     physically set every video mode to see if it is supported. You might
  514.     want to put up different warnings depending on what will actually
  515.     happen, see RESTEST for a simple example.
  516.  
  517. 4)  To scan and then select video mode:
  518.  
  519.       SetupVideoList;
  520.       SelectVideoModeDialog;
  521.  
  522.     If you use resources, try this:
  523.  
  524.       SetupVideoList;
  525.       SelectVideoMode(
  526.         PSelectVideoModeDialog(RezFile.Get('VideoModeDialog')));
  527.  
  528. 5)  To save the video modes found during scanning, use StoreVideoModes:
  529.  
  530.     var
  531.       S : TDosStream;
  532.  
  533.     RegisterObjects;
  534.     S.Init('VIDEOTST.INI', stCreate);
  535.     StoreVideoModes(S);
  536.     S.Done;
  537.  
  538.     Use LoadVideoModes to restore them. See RESTEST for an advanced
  539.     example.
  540.  
  541. 6)  Remember to change all your old references to SetScreenMode to
  542.     SetSpecialScreenMode, but...
  543.  
  544. 7)  YOU CANNOT USE smFont8x8 or smSpecialFont8x8! TVToys does not
  545.     support this any longer, there is now a ToggleVideoLines procedure.
  546.     You can also use the SetInternalFont(Internal8x8Font) procedure.
  547.  
  548. 8)  This code has to trash Turbo Vision's StartUpMode to get by
  549.     "internal security".
  550.     Since Video7 cards use video mode 1 to signify the last extended
  551.     video mode used, special care must be taken to provide intelligent
  552.     StartupMode behaviour if Video7Support is defined. TToyApp uses
  553.     VideoState objects and handles everything transparently for you.
  554.  
  555. 9)  If you want to be on the safe side and not immediately detect all
  556.     sorts of video hardware, look at RESTEST.PAS for some ideas.
  557.  
  558.  
  559.  
  560.     Custom Fonts  ▄
  561.   ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  562. FontFile is a unit that lets you access fonts stored on disk in a
  563. variety of formats. Current supported formats are version 1.0 and
  564. version 2.0 of Michael J Mefford's (Ziff Communications) FontEdit
  565. (source published in PC Magazine and available almost everywhere) and my
  566. own format. I have a Turbo Vision font editor that will be made
  567. available sometime, but you can try to talk me out of a beta. I also
  568. have about 60 fonts, a few of which are useful.
  569.  
  570. Defining the font is only possible on EGA/MCGA/VGA cards. You can do
  571. it on Hercules cards too, but I have lost all my documentation files.
  572.  
  573. The font is only temporarily changed. If the video mode changes, the
  574. font changes to a standard video card one. Shelling to DOS provides
  575. ample opportunity to change the video mode.
  576.  
  577. FontDlg.SelectFontDialog(FontPath:String; Res:PResourceFile) searches
  578. for fonts in the current directory and in the Res resource file and
  579. presents a list for the user to choose from.
  580.  
  581. You have to define DiskFont if you want to look on disk and ResFont if
  582. you want to look in the resource file. You can define both at once if
  583. you like. If you don't, pass dummy parameters like '' and Nil.
  584. SelDiskFont is 3K code. See RESTEST for a resource example.
  585.  
  586. The FontPath directory should have one or more font COM files in any of
  587. the above formats. Use the empty string ('') if you want to search the
  588. current directory, or ExeDir to search the executable file's directory
  589. (if you inherit from TToyApp).
  590.  
  591. The resource file must contain a StringCollection resource saved under
  592. the key FONTLIST (see TOYPREFS and RESTEST) with the keys of the
  593. TFontFiles available in the stream.
  594.  
  595. You can load a disk font with the LoadDiskFont procedure, but if that
  596. fails there will be an error message box. To load a specific font
  597. without getting an error message if it fails, use the FontFiles unit
  598. like this:
  599.  
  600.   var
  601.     Font  : FontFile;
  602.  
  603.   if Font.DoRead(FileName) then  (* Font.Read uses "Error" MsgBox on error *)
  604.     Font.Display;
  605.  
  606.  
  607. You can also directly load a font from a stream, a resource file for
  608. instance:
  609.  
  610.   RegisterFontFile;
  611.   LoadResFont(RezFile, 'CHIC12');
  612.  
  613.  
  614. The DoubleString unit provides a special kind of string, actually one
  615. block with two strings right after another. This is used in the font
  616. selection dialog to keep track of corresponding file names and resource
  617. keys.
  618.  
  619. Run VIDEOTST and RESTEST to see these units in action.
  620.  
  621.  
  622.  
  623.     The NewMouse Unit  ▄
  624.   ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  625. NewMouse is a quick and dirty solution for buggy mouse drivers that
  626. don't know a thing about any video modes except the "standard" ones. If
  627. you have a Logitech mouse driver, you will probably never have any
  628. problems, but others will.
  629.  
  630. Most mouse drivers have problems with video modes they are not familiar
  631. with. They might not let the cursor travel across all the screen, or
  632. worse, think that what is in fact a text mode is a graphics mode and
  633. present a "graphics mode" mouse cursor (a bunch of garbage).
  634.  
  635. NewMouse simply contains its own routines for drawing a mouse cursor.
  636. NewMouse relies on BIOS information to determine the width of the
  637. screen. The screen is always assumed to be in text mode. If you want to
  638. switch to graphics mode, you have to take some precautions. See
  639. NEWMOUSE.PAS.
  640.  
  641. NewMouse has no hardware cursor support, so the cursor will always be
  642. drawn in the standard text mode way. You cannot change the appearance of
  643. the mouse cursor without turning NewMouse off by using
  644. UseNewMouse(False).
  645.  
  646. Since NewMouse solely focuses on drawing a mouse cursor, there will
  647. still be a text mode mouse cursor if you run a TV application windowed
  648. (not full screen) in Windows enhanced mode. Looks funny. Don't know what
  649. to do about it.
  650.  
  651. To use NewMouse, all you have to do is define UseNewMouse in TOYCFG.
  652. This makes TToyApp use NewMouse and automatically turns it off in DOS.
  653.  
  654. It seems you cannot use NewMouse if you want to debug with TDX v3.2, as
  655. TDX doesn't like changing the mouse interrupt?
  656.  
  657. You CANNOT overlay the NewMouse unit.
  658.  
  659.  
  660.  
  661.     EXE Stream Unit  ▄
  662.   ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  663. The Exe stream unit allows you to add your own resources to an EXE file.
  664. You can now put your Help file in the EXE file by just appending it as
  665. would it be a resource collection file and defining ExeHelp before
  666. recompiling TOYAPP.PAS. This only seems to work for real mode EXEs.
  667.  
  668. All EXE stream seeks are relative to the resource's first header byte.
  669.  
  670. You can also easily add your own resources as long as you follow Borland's
  671. system for EXE additions, see EXESTRM.PAS.
  672.  
  673.  
  674.  
  675.     VideoModeChanged Variable  ▄
  676.   ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  677. The procedure TVVideo.VideoModeChanged is called whenever the video mode
  678. has changed in the TV environment (whenever InitTVVideo us called).
  679. This is a procedure pointer, so you can hook your own code if you want.
  680. The default is to do nothing, but you can point it to
  681. FontDlg.ReloadLastFont or TVPal.ReloadLastPalette or
  682. FontDlg.ReloadFontAndPalette to achieve different results. You have to
  683. do this explicitly, it's no longer done automatically.
  684.  
  685. See RESTEST and VIDEOTST for two examples.
  686.  
  687.  
  688.  
  689.     Changes  ▄
  690.   ▀▀▀▀▀▀▀▀▀▀▀▀
  691. 1.1:
  692.   ColorTxt draw method changed. Mini shadows.
  693.  
  694. 1.3:
  695.  Docs:
  696.   Porting, Suggestions and PC Video modes sections added in this file.
  697.  
  698.  Prefs:
  699.   All conditionals in one file, TOYCFG.PAS. You should delete all other
  700.   conditional defines, ie in Compiler Options. Remember to edit your
  701.   include path if you compile from another directory.
  702.   TOYPREFS added.
  703.  
  704.  Fonts:
  705.   Custom fonts and font files. Streamable fonts. Font selection dialog.
  706.   RESTEST font resource demo added.
  707.  
  708.  Help:
  709.   SwitchToTopic and PopHelp combined to ShowHelp.
  710.   Last highlighted topic remembered in HelpFile.
  711.   Help contexts are not commented any more, see TOYCFG, TOYPREFS and
  712.   HCFILE and the Porting section.
  713.   Borland empty topic bug found and fixed.
  714.   Fixes to enable Range Checking.
  715.  
  716.  NewMouse:
  717.   NewMouse doesn't use code segment any more, DosShell bug fixed.
  718.   Use UseNewMouse ONLY when mouse cursor is hidden.
  719.   You don't have to (you should NOT) put NewMouse in the uses list if
  720.   you use TToyApp and define UseNewMouse.
  721.  
  722.  Video:
  723.   TVVIDEO NO LONGER SUPPORTS smFont8x8, use ToggleVideoLines.
  724.   FindSimilarVideoMode added to ModeDlg.
  725.   Current mode read from BIOS, not BIOS data (ATI fix from D Baldwin)
  726.   Video.VideoTypesToCheck controls (run-time) what video checks will
  727.   actually be performed, default is all supported.
  728.   A big DPMI bug from the Vesa code fixed. Thanks to Marek Bojarski for
  729.   putting up with me.
  730.   RESTEST and CHECKVT added.
  731.  
  732.  Other:
  733.   TOYAPP added. Inherit TToyApp for easy application porting.
  734.   EXE stream added, lets you put the help text in the EXE.
  735.   RESTEST font resource, config file app demo added.
  736.  
  737. 1.4:
  738.  Help:
  739.   Another Borland bug fixed, topic link spilling.
  740.   Last highlighted topic bug fixed.
  741.  
  742.  Video:
  743.   COLORBOX added, instant color selection with color propagation.
  744.   PAL, TVPAL added: Palette routines, TV palette changing dialog.
  745.   RESTEST updated to demonstrate TVPal and ColorBox.
  746.   ReloadLastFont variable GONE, you must now EXPLICITLY assign a
  747.   value to VideoModeChanged. See the VideoModeChanged section.
  748.  
  749.  Other:
  750.   STRMREC created, all stream registration records in one file.
  751.   SCROLL, scrollbars with instant dragging response.
  752.   TVUTILS, odd bits and pieces, validators.
  753.   VideoModeChanged section added.
  754.  
  755.  
  756.  
  757.     Credits  ▄
  758.   ▀▀▀▀▀▀▀▀▀▀▀▀
  759. All dialogs designed and generated with Dialog Design 4.0 available on
  760. Compuserve and by anonymous ftp to garbo.uwasa.fi in directory
  761. /pc/turbovis and oak.oakland.edu in /pub/msdos/turbovis.
  762. Thanks to David Baldwin, who also contributed the original ColorTxt
  763. unit and an ATI fix.
  764.  
  765. NewMouse, VESA and DPMI bug fixes and lots of other suggestions from
  766. Marek Bojarski without whom TVToys would be buggier than a mouse driver.
  767.  
  768. I finally found a VESA TSR for Video7 that contained TEXT mode support.
  769. Thanks to Gary Lorenson.
  770.  
  771. All Video7 and VESA information derived from Ralf Brown's famous
  772. interrupt listing.
  773.  
  774. DPMI information from Borland source and the official DPMI
  775. specifications.
  776.  
  777. This project would have been utterly impossible without the help of
  778. Borland's run time source, or for that matter, Borland Pascal 7.0...
  779.  
  780.  
  781.  
  782.     Author, Support, Info, Bugs etc  ▄
  783.   ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  784. If you would like to see further enhancements to this code, write me a
  785. letter telling me what you like and don't like, what works and what
  786. doesn't, and what improvements you want to see.
  787.  
  788. Since I am a computer science student with no income, I would very much
  789. appreciate a financial contribution. Get in touch with me if you feel
  790. that you want to support this package financially. Unfortunately a check
  791. costs me SEK 70 (almost $10) to cash in, so cash or wire is best for me!
  792.  
  793. I accept orders for the latest version and will send invoices by
  794. arrangement.
  795.  
  796. Bug reports, enhancements, contributions, credits, postcards and money
  797. are always welcome!
  798.  
  799.   My internet address:
  800.  
  801.     d91-pbr@nada.kth.se
  802.  
  803.   You can reach me from CompuServe by sending mail to:
  804.  
  805.     INTERNET:d91-pbr@nada.kth.se
  806.  
  807.   Mail:
  808.  
  809.     Peter Brandström          (Peter Brandstrom)
  810.     Roslagsgatan 10
  811.     S-113 55 Stockholm
  812.     Sweden, Europe
  813.  
  814.  
  815.  
  816.     To Do List  ▄
  817.   ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  818.  
  819. Video mode selection dialog help texts produced by native English
  820. speaking person. Volunteers?
  821.  
  822. Merging HelpTest and VideoTst using the above help texts for
  823. demonstration.
  824.  
  825. Easier internationalization (is anyone really into this?)
  826.  
  827. More toys? (I have a 64K+ editor under construction)
  828.  
  829.